package br.com.medvagas.comum.entidade;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedNativeQueries;
import javax.persistence.NamedNativeQuery;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

/**
 * The persistent class for the usuario_empresa database table.
 */
@Entity
@Table(name="usuario_empresa")
@NamedQueries({
	@NamedQuery(
		name="UsuarioEmpresa.consultarPorCpf", 
		query="select u.idUsuarioEmpresa from UsuarioEmpresa u where u.cpf = :cpf"),
	@NamedQuery(
		name="UsuarioEmpresa.consultarPorEmail", 
		query="select u.idUsuarioEmpresa from UsuarioEmpresa u where u.email = :email"),
	@NamedQuery(
		name="UsuarioEmpresa.consultarPorEmailCompleto", 
		query="select u from UsuarioEmpresa u where u.email = :email"),
	@NamedQuery(
		name="UsuarioEmpresa.consultarPorEmailSenha", 
		query="select u from UsuarioEmpresa u where u.email = :email and u.senha = :senha"),
	@NamedQuery(
		name="UsuarioEmpresa.consultarPorCpfToken", 
		query="select u from UsuarioEmpresa u where u.cpf = :cpf and u.tokenValidacaoEmail = :tokenValidacaoEmail"),
	@NamedQuery(
		name="UsuarioEmpresa.consultarTodos", 
		query="select u from UsuarioEmpresa u order by u.nome")
})
@NamedNativeQueries({
	@NamedNativeQuery(
		name="UsuarioEmpresa.delete", 
		query="delete from usuario_empresa where id_usuario_empresa = :idUsuarioEmpresa", resultClass=UsuarioEmpresa.class)
})
public class UsuarioEmpresa implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="id_usuario_empresa")
	private Integer idUsuarioEmpresa;

	@Column(name="aceitou_termo_servico")
	private Boolean aceitouTermoServico;

	private String cargo;

	@Column(name="como_conheceu_site")
	private String comoConheceuSite;
	
	@Column(name="como_conheceu_site_outro")
	private String comoConheceuSiteOutro;

	private String cpf;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="data_cadastro")
	private Date dataCadastro;

	@Temporal(TemporalType.TIMESTAMP)
	@Column(name="data_ultima_alteracao")
	private Date dataUltimaAlteracao;

    @Temporal(TemporalType.TIMESTAMP)
	@Column(name="data_ultimo_acesso")
	private Date dataUltimoAcesso;

	private String email;

	private String nome;

	@Column(name="onde_mais_anuncia")
	private String ondeMaisAnuncia;
	
	@Column(name="onde_mais_anuncia_outro")
	private String ondeMaisAnunciaOutro;
	
	@Column(name="onde_mais_anuncia_site")
	private String ondeMaisAnunciaSite;

	private String ramal;

	@Column(name="receber_informativos")
	private Boolean receberInformativos;

	private String senha;

	private String sexo;

	private String telefone;

	@Column(name="token_validacao_email")
	private String tokenValidacaoEmail;

	@Column(name="usuario_validado")
	private Boolean usuarioValidado;

	//bi-directional @OneToMany association to UsuarioEmpresa
	@OneToMany(mappedBy="usuarioEmpresa", fetch=FetchType.LAZY)
	private Set<Empresa> empresas;

	//bi-directional many-to-one association to AreaAtuacao
    @ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="id_area_atuacao", updatable=false, insertable=false)
	private AreaAtuacao areaAtuacao;
    @Column(name="id_area_atuacao")
    private Integer idAreaAtuacao;
	
    @Transient
    private String confirmacaoEmail;
    @Transient
    private String confirmacaoSenha;
    
    public UsuarioEmpresa() {
    }

	public Integer getIdUsuarioEmpresa() {
		return this.idUsuarioEmpresa;
	}

	public void setIdUsuarioEmpresa(Integer idUsuarioEmpresa) {
		this.idUsuarioEmpresa = idUsuarioEmpresa;
	}

	public Boolean getAceitouTermoServico() {
		return this.aceitouTermoServico;
	}

	public void setAceitouTermoServico(Boolean aceitouTermoServico) {
		this.aceitouTermoServico = aceitouTermoServico;
	}

	public String getCargo() {
		return this.cargo;
	}

	public void setCargo(String cargo) {
		this.cargo = cargo;
	}

	public String getComoConheceuSite() {
		return this.comoConheceuSite;
	}

	public void setComoConheceuSite(String comoConheceuSite) {
		this.comoConheceuSite = comoConheceuSite;
	}

	public String getCpf() {
		return this.cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public Date getDataCadastro() {
		return this.dataCadastro;
	}

	public void setDataCadastro(Date dataCadastro) {
		this.dataCadastro = dataCadastro;
	}

	public Date getDataUltimaAlteracao() {
		return this.dataUltimaAlteracao;
	}

	public void setDataUltimaAlteracao(Date dataUltimaAlteracao) {
		this.dataUltimaAlteracao = dataUltimaAlteracao;
	}

	public Date getDataUltimoAcesso() {
		return this.dataUltimoAcesso;
	}

	public void setDataUltimoAcesso(Date dataUltimoAcesso) {
		this.dataUltimoAcesso = dataUltimoAcesso;
	}

	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getNome() {
		return this.nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getOndeMaisAnuncia() {
		return this.ondeMaisAnuncia;
	}

	public void setOndeMaisAnuncia(String ondeMaisAnuncia) {
		this.ondeMaisAnuncia = ondeMaisAnuncia;
	}

	public String getRamal() {
		return this.ramal;
	}

	public void setRamal(String ramal) {
		this.ramal = ramal;
	}

	public Boolean getReceberInformativos() {
		return this.receberInformativos;
	}

	public void setReceberInformativos(Boolean receberInformativos) {
		this.receberInformativos = receberInformativos;
	}

	public String getSenha() {
		return this.senha;
	}

	public void setSenha(String senha) {
		this.senha = senha;
	}

	public String getSexo() {
		return this.sexo;
	}

	public void setSexo(String sexo) {
		this.sexo = sexo;
	}

	public String getTelefone() {
		return this.telefone;
	}

	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}

	public Boolean getUsuarioValidado() {
		return this.usuarioValidado;
	}

	public void setUsuarioValidado(Boolean usuarioValidado) {
		this.usuarioValidado = usuarioValidado;
	}

	public Set<Empresa> getEmpresas() {
		return empresas;
	}

	public void setEmpresas(Set<Empresa> empresas) {
		this.empresas = empresas;
	}

	public AreaAtuacao getAreaAtuacao() {
		return this.areaAtuacao;
	}

	public void setAreaAtuacao(AreaAtuacao areaAtuacao) {
		this.areaAtuacao = areaAtuacao;
	}

	public String getTokenValidacaoEmail() {
		return tokenValidacaoEmail;
	}

	public void setTokenValidacaoEmail(String tokenValidacaoEmail) {
		this.tokenValidacaoEmail = tokenValidacaoEmail;
	}

	public String getConfirmacaoEmail() {
		return confirmacaoEmail;
	}

	public void setConfirmacaoEmail(String confirmacaoEmail) {
		this.confirmacaoEmail = confirmacaoEmail;
	}

	public String getConfirmacaoSenha() {
		return confirmacaoSenha;
	}

	public void setConfirmacaoSenha(String confirmacaoSenha) {
		this.confirmacaoSenha = confirmacaoSenha;
	}

	public String getComoConheceuSiteOutro() {
		return comoConheceuSiteOutro;
	}

	public void setComoConheceuSiteOutro(String comoConheceuSiteOutro) {
		this.comoConheceuSiteOutro = comoConheceuSiteOutro;
	}

	public String getOndeMaisAnunciaOutro() {
		return ondeMaisAnunciaOutro;
	}

	public void setOndeMaisAnunciaOutro(String ondeMaisAnunciaOutro) {
		this.ondeMaisAnunciaOutro = ondeMaisAnunciaOutro;
	}

	public String getOndeMaisAnunciaSite() {
		return ondeMaisAnunciaSite;
	}

	public void setOndeMaisAnunciaSite(String ondeMaisAnunciaSite) {
		this.ondeMaisAnunciaSite = ondeMaisAnunciaSite;
	}

	public Integer getIdAreaAtuacao() {
		return idAreaAtuacao;
	}

	public void setIdAreaAtuacao(Integer idAreaAtuacao) {
		this.idAreaAtuacao = idAreaAtuacao;
	}
	
}